SPB Git forge

spb/toveli

Public
14commits 1branches 0releases
1.1 MBsize
maindefault branch
5 h agolast push
TypeScript 50.6% JavaScript 46.1% SQL 2.1% Shell 0.6% CSS 0.5%
2.0 KB · 17 lines tsx
Raw Blame History
1import { notFound } from "next/navigation";2import { requireUser } from "@/lib/auth/session";3import { getListingFull } from "@/lib/listings/service";4import { mediaUrl } from "@/lib/listings/media";5import { Wizard } from "./wizard";6export const dynamic = "force-dynamic";7export default async function EditAnnonce({ params }: { params: Promise<{ id: string }> }) {8  const u = await requireUser(); const { id } = await params; const l = await getListingFull(id);9  if (!l || (l.ownerUserId !== u.id && !u.roles.includes("ADMIN") && !u.roles.includes("MODERATOR"))) notFound();10  const initial = { id: l.id, slug: l.slug, status: l.status, version: l.version, wizardStep: l.wizardStep, attestedAt: l.attestedAt?.toISOString() ?? null, moderationNote: l.moderationNote,11    listingType: l.listingType as "SALE" | "RENT", sourceType: l.sourceType as "DIRECT_OWNER" | "DIRECT_AGENT", propertyType: l.property.propertyType, address: l.property.canonicalAddress, unit: l.property.unit, city: l.property.city, region: l.property.region, postalCode: l.property.postalCode, lat: l.property.lat, lng: l.property.lng, roleUnitId: l.property.roleUnitId, privacyLevel: l.property.privacyLevel,12    bedrooms: l.property.bedrooms != null ? Number(l.property.bedrooms) : null, bathrooms: l.property.bathrooms != null ? Number(l.property.bathrooms) : null, areaSqft: l.property.areaSqft, lotSqft: l.property.lotSqft, yearBuilt: l.property.yearBuilt,13    title: l.title, description: l.description, priceAmount: l.priceAmount != null ? Number(l.priceAmount) : null, availabilityDate: l.availabilityDate, furnished: l.furnished, petsPolicy: l.petsPolicy, smokingPolicy: l.smokingPolicy, parking: l.parking, leaseTerms: l.leaseTerms, inclusions: (l.inclusions as string[]) ?? [], features: (l.features as Record<string, string | number | boolean>) ?? {},14    media: l.media.map((m) => ({ id: m.id, url: mediaUrl(m.storageKey, 320), large: mediaUrl(m.storageKey, 800), altText: m.altText ?? "", position: m.position })) };15  return <Wizard initial={initial} />;16}17